package com.sheng.leetcode.year2023.month11.day23;

import org.junit.Test;

/**
 * @author by ls
 * @date 2023/11/23
 * <p>
 * 1410. HTML 实体解析器<p>
 * <p>
 * 「HTML 实体解析器」 是一种特殊的解析器，它将 HTML 代码作为输入，并用字符本身替换掉所有这些特殊的字符实体。<p>
 * HTML 里这些特殊字符和它们对应的字符实体包括：<p>
 * 双引号：字符实体为 &quot; ，对应的字符是 " 。<p>
 * 单引号：字符实体为 &apos; ，对应的字符是 ' 。<p>
 * 与符号：字符实体为 &amp; ，对应对的字符是 & 。<p>
 * 大于号：字符实体为 &gt; ，对应的字符是 > 。<p>
 * 小于号：字符实体为 &lt; ，对应的字符是 < 。<p>
 * 斜线号：字符实体为 &frasl; ，对应的字符是 / 。<p>
 * 给你输入字符串 text ，请你实现一个 HTML 实体解析器，返回解析器解析后的结果。<p>
 * <p>
 * 示例 1：<p>
 * 输入：text = "&amp; is an HTML entity but &ambassador; is not."<p>
 * 输出："& is an HTML entity but &ambassador; is not."<p>
 * 解释：解析器把字符实体 &amp; 用 & 替换<p>
 * <p>
 * 示例 2：<p>
 * 输入：text = "and I quote: &quot;...&quot;"<p>
 * 输出："and I quote: \"...\""<p>
 * <p>
 * 示例 3：<p>
 * 输入：text = "Stay home! Practice on Leetcode :)"<p>
 * 输出："Stay home! Practice on Leetcode :)"<p>
 * <p>
 * 示例 4：<p>
 * 输入：text = "x &gt; y &amp;&amp; x &lt; y is always false"<p>
 * 输出："x > y && x < y is always false"<p>
 * <p>
 * 示例 5：<p>
 * 输入：text = "leetcode.com&frasl;problemset&frasl;all"<p>
 * 输出："leetcode.com/problemset/all"<p>
 * <p>
 * 提示：<p>
 * 1 <= text.length <= 10^5<p>
 * 字符串可能包含 256 个ASCII 字符中的任意字符。<p>
 */
public class LeetCode1410 {

    @Test
    public void test01() {
        String text = "&amp; is an HTML entity but &ambassador; is not.";
//        String text = "and I quote: &quot;...&quot;";
//        String text = "Stay home! Practice on Leetcode :)";
//        String text = "x &gt; y &amp;&amp; x &lt; y is always false";
//        String text = "leetcode.com&frasl;problemset&frasl;all";
        System.out.println(new Solution().entityParser(text));
    }
}

class Solution {
    public String entityParser(String text) {
        String replace = text.replace("&quot;", "\"");
        String replace1 = replace.replace("&apos;", "'");
        String replace2 = replace1.replace("&gt;", ">");
        String replace3 = replace2.replace("&lt;", "<");
        String replace4 = replace3.replace("&frasl;", "/");
        // 最后替换 & 防止替换完成后和其余字符组成可替换项
        String replace5 = replace4.replace("&amp;", "&");
        return replace5;
    }
}
